package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/*
 SpringMVC组件：
 前端控制器：DispatcherServlet
 处理器映射器：HandlerMapping
 处理器适配器：HandlerAdapter
 处理器：Handler
 视图解析器：View Resolver
 视图：View
*/

@Controller
//@RequestMapping("/user")
public class UserController {
    /**
     * 快速入门
     * @return 视图地址
     */
    //请求地址 http://localhost:8080/虚拟目录/hello
    //如果类上的RequestMapping注解不被注释，则请求地址为http://localhost:8080/虚拟目录/user/hello
    @RequestMapping("/hello")
    public String save() {
        System.out.println("Controller save running...");
        //返回地址 http://localhost:8080/虚拟目录/hello.jsp
        //如果类上的RequestMapping注解不被注释，则返回地址为http://localhost:8080/虚拟目录/user/hello.jsp
        return "hello.jsp";//此处为相对路径
    }

    /*    @RequestMapping注解快速入门
    作用：用于建立请求 URL 和处理请求方法之间的对应关系
    位置：
         1.类上，请求URL 的第一级访问目录。此处不写的话，就相当于应用的根目录。
         2.方法上，请求 URL 的第二级访问目录，与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
    属性：
          value：用于指定请求的URL。它和path属性的作用是一样的
          method：用于指定请求的方式,只有当请求方式为指定的方式时，才会进入到这个资源中
          params：用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样

    例如：
          params = {"accountName"}，表示请求参数必须有accountName
          params = {"moeny!100"}，表示请求参数中money不能是100
    */
    @RequestMapping(value = "/RequestMapping", method = RequestMethod.GET, params = {"username"})
    public String save_RequestMapping() {
        System.out.println("RequestMapping注解快速入门");
        return "hello.jsp";//此处为相对路径
    }

    /**
     * 视图解析器快速入门 InternalResourceViewResolver类
     * 视图解析器的默认设置如下
     * REDIRECT_URL_PREFIX = "redirect:"  --重定向前缀
     * FORWARD_URL_PREFIX = "forward:"    --转发前缀（默认值）
     * prefix = "";     --视图名称前缀
     * suffix = "";     --视图名称后缀
     * 只有转发会通过视图解析器，进行前缀后缀添加
     * 重定向不会通过视图解析器，也就不会自动添加前缀和后缀
     */
    @RequestMapping(value = "/ViewResolverByRedirect")
    public String saveByRedirect() {
        System.out.println("视图解析器快速入门");
//        return "forword:hello";//默认为转发方式返回视图，因此forword可以省略不写
        //以重定向方式返回视图,访问jsp目录下的hello.jsp，需要自己写前后缀
        return "redirect:jsp/hello.jsp";
    }
    @RequestMapping(value = "/ViewResolverByForward")
    public String saveByForward() {
        System.out.println("视图解析器快速入门");
        //以转发方式返回视图,访问jsp目录下的hello.jsp，在配置了前后缀的情况下不需要自己写前后缀
        return "hello";
    }
}

